package com.zzld.core.utils;

import java.text.DateFormat;
import java.text.ParseException;
import java.text.ParsePosition;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;

/**
 * 
 * @Title: DateUtil.java
 * @Package com.nxzzld.core.utils
 * @Description: 日期处理工具类
 * @author ZhangNan
 * @date 2013-4-23 下午7:53:33
 * @version V1.0
 *
 */
public class DateUtil {

	// 用来全局控制 上一周，本周，下一周的周数变化
	private static int weeks = 0;
	private static int MaxDate;// 一月最大天数
	private static int MaxYear;// 一年最大天数

	/**
	 * @param args
	 */
	public static void main(String[] args) {
//		System.out.println("");
//		
//		Debug.print("");
		
		/*
		 * DateUtil tt = new DateUtil();
		 * System.out.println("获取当天日期:"+tt.getNowTime("yyyy-MM-dd"));
		 * System.out.println("获取本周一日期:"+tt.getMondayOFWeek());
		 * System.out.println("获取本周日的日期~:"+tt.getCurrentWeekday());
		 * System.out.println("获取上周一日期:"+tt.getPreviousWeekday());
		 * System.out.println("获取上周日日期:"+tt.getPreviousWeekSunday());
		 * System.out.println("获取下周一日期:"+tt.getNextMonday());
		 * System.out.println("获取下周日日期:"+tt.getNextSunday());
		 * System.out.println("获得相应周的周六的日期:"+tt.getNowTime("yyyy-MM-dd"));
		 * System.out.println("获取本月第一天日期:"+tt.getFirstDayOfMonth());
		 * System.out.println("获取本月最后一天日期:"+tt.getLastDayOfMonth());
		 * System.out.println("获取上月第一天日期:"+tt.getPreviousMonthFirst());
		 * System.out.println("获取上月最后一天的日期:"+tt.getPreviousMonthEnd());
		 * System.out.println("获取下月第一天日期:"+tt.getNextMonthFirst());
		 * System.out.println("获取下月最后一天日期:"+tt.getNextMonthEnd());
		 * System.out.println("获取本年的第一天日期:"+tt.getCurrentYearFirst());
		 * System.out.println("获取本年最后一天日期:"+tt.getCurrentYearEnd());
		 * System.out.println("获取去年的第一天日期:"+tt.getPreviousYearFirst());
		 * System.out.println("获取去年的最后一天日期:"+tt.getPreviousYearEnd());
		 * System.out.println("获取明年第一天日期:"+tt.getNextYearFirst());
		 * System.out.println("获取明年最后一天日期:"+tt.getNextYearEnd());
		 * System.out.println("获取本季度第一天到最后一天:"+tt.getThisSeasonTime(11));
		 * System.out.println("获取本季度第一天:"+tt.getThisSeasonFirst(11));
		 * System.out.println("获取本季度最后一天:"+tt.getThisSeasonEnd(11));
		 * System.out.println
		 * ("获取两个日期之间间隔天数2008-12-1~2008-9.29:"+DateUtil.getTwoDay
		 * ("2008-12-1","2008-9-29"));
		 */

//		String currDate = "20101001";
//		System.out.println(currDate);
//		// System.out.println(isFristDayOfCollectionTaxTermEnd(currentTime,ConstantsKey.ZSXM_ZZS));
//		System.out.println("获取季度第一天:" + isFirstDayOfThisSeason("20100401"));
//
//		if (DateUtil.isFirstDayOfThisSeason(currDate)) {
//			String beforeDate = getBeforeDateByDate(currDate, 2);
//			// 获得上季度的第一天
//			// ssqq = DateUtil.getThisSeasonFirst(lastMonth);
//			String ssqq = DateUtil.getThisSeasonFirst(beforeDate
//					.substring(0, 4), Integer.parseInt(beforeDate.substring(4,
//					6)));
//			// 获得上季度的最后一天
//			// ssqz = DateUtil.getThisSeasonEnd(lastMonth);
//			String ssqz = DateUtil.getThisSeasonEnd(beforeDate.substring(0, 4),
//					Integer.parseInt(beforeDate.substring(4, 6)));
//			System.out.println("ssqq================" + ssqq);
//			System.out.println("ssqz================" + ssqz);
//		}
		
		
		System.out.println(DateUtil.transDateFromInteger(20111002));

	}

	

	static public String DoFormatDate(java.util.Date dt_in,
			boolean bShowTimePart_in) {
		if (bShowTimePart_in)
			return (new SimpleDateFormat("yyyy-MM-dd HH:mm:ss")).format(dt_in);
		else
			return (new SimpleDateFormat("yyyy-MM-dd")).format(dt_in);
	}

	public static int getJd(String rq) {
		int month = Integer.parseInt(rq.substring(5, 7));
		return ((month - 1) / 3 + 1);
	}

	

	/**
	 * 去除日期字符串中-，： 空格等字符
	 * @param ssrq
	 * @return
	 */
	public static String transformDate(String ssrq) {
		if (ssrq == null || ssrq.equals("") || ssrq.equals("null"))
			return null;
		return ssrq.replaceAll("-", "").replaceAll(":", "").replaceAll(" ", "")
				.trim();
	}

	/**
	 * 将yyyyMMdd格式的日期转换为yyyy-MM-dd格式的日期
	 * 
	 * @param rq
	 * @return
	 */
	public static String transformDate_(String rq) {
		if (rq == null)
			return null;
		SimpleDateFormat simple = (SimpleDateFormat) DateFormat.getInstance();

		String patternString = "";
		if(rq.toString().length() == 6){
			simple.applyPattern("yyyyMM");
			patternString = "yyyy-MM";// yyyy年MM月dd日
		}else if (rq.toString().length() == 8) {
			simple.applyPattern("yyyyMMdd");
			patternString = "yyyy-MM-dd";// yyyy年MM月dd日
		} else if (rq.toString().length() == 10) {
			simple.applyPattern("yyyy-MM-dd");
			patternString = "yyyy-MM-dd";// yyyy年MM月dd日
		} else if (rq.toString().length() == 14) {
			simple.applyPattern("yyyyMMddHHmmss");
			patternString = "yyyy-MM-dd HH:mm:ss";// yyyy年MM月dd日
		} else
			return rq.toString();
		try {
			Date da = simple.parse(rq.toString());
			simple.applyPattern(patternString);
			return simple.format(da);
		} catch (ParseException e) {
			e.printStackTrace();

		}
		return rq;
	}

	

	
	
	/**
	 * 将yyyyMMdd格式的日期转换为yyyy-MM-dd格式的日期
	 * 
	 * @param rq
	 * @return
	 */
	public static String transDateFromInteger(Integer rq) {
		if (rq == null)
			return null;
		SimpleDateFormat simple = (SimpleDateFormat) DateFormat.getInstance();

		String patternString = "";
		if(rq.toString().length()==6){
			simple.applyPattern("yyyyMM");
			patternString = "yyyy-MM";// yyyy年MM月
		}else if (rq.toString().length() == 8) {
			simple.applyPattern("yyyyMMdd");
			patternString = "yyyy-MM-dd";// yyyy年MM月dd日
		} 
		try {
			Date da = simple.parse(rq.toString());
			simple.applyPattern(patternString);
			return simple.format(da);
		} catch (ParseException e) {
			e.printStackTrace();

		}
		return rq.toString();
	}
	
	
	
	
	/**
	 * 将传入日期转化为时分秒格式的日期时间字符串
	 * @param date
	 * @return
	 */
	public static String getDataString(Date date) {
		SimpleDateFormat simple = (SimpleDateFormat) DateFormat
				.getDateInstance();
		simple.applyPattern("yyyy-MM-dd HH:mm:ss");
		return simple.format(date);
	}

	/**
	 * 根据传入的日期和指定格式，返回指定格式的日期字符串
	 * @param date
	 * @param pattern
	 * @return
	 */
	public static String getDataString(Date date, String pattern) {
		SimpleDateFormat simple = (SimpleDateFormat) DateFormat
				.getDateInstance();
		simple.applyPattern(pattern);
		return simple.format(date);
	}

	/**
	 * 将日期转化为8位数字格式的日期
	 * @param str
	 * @return
	 */
	public static String transformDateString(Object str) {
		String dataString = transformDate(String.valueOf(str));
		if (dataString.length() >= 8)
			return transformDate_(dataString.substring(0, 8));
		return dataString;
	}

	/**
	 * 将yyyy-MM-dd 时间格式的日期返回年
	 * 
	 * @param rq
	 * @return yyyy
	 */
	public static String formatDate_Y(String rq) {
		SimpleDateFormat simple = (SimpleDateFormat) DateFormat
				.getDateInstance();
		if (rq == null || rq.equals("") || rq.equals("null"))
			return "";
		if (rq.length() == 10)
			simple.applyPattern("yyyy-MM-dd");
		if (rq.length() == 8)
			simple.applyPattern("yyyyMMdd");
		try {
			Date date = simple.parse(rq);
			Calendar ca = Calendar.getInstance();
			ca.setTime(date);
			return ca.get(Calendar.YEAR) + "";
		} catch (ParseException e) {
			e.printStackTrace();
		}
		return rq;
	}

	/**
	 * 将yyyy-MM-dd 时间格式的日期返回年
	 * 
	 * @param rq
	 * @return yyyyMM
	 */
	public static String formatDate_M(String rq) {
		SimpleDateFormat simple = (SimpleDateFormat) DateFormat
				.getDateInstance();
		if (rq == null || rq.equals("") || rq.equals("null"))
			return "";
		if (rq.length() == 10)
			simple.applyPattern("yyyy-MM-dd");
		if (rq.length() == 8)
			simple.applyPattern("yyyyMMdd");
		try {
			Date date = simple.parse(rq);
			Calendar ca = Calendar.getInstance();
			ca.setTime(date);
			String mon = (ca.get(Calendar.MONTH) + 1) + "";
			return ca.get(Calendar.YEAR) + mon;
		} catch (ParseException e) {
			e.printStackTrace();
		}
		return rq;
	}

	/**
	 * 将yyyy-MM-dd 时间格式的日期返回年
	 * 
	 * @param rq
	 * @return yyyyMM
	 */
	public static String formatDate_D(String rq) {
		SimpleDateFormat simple = (SimpleDateFormat) DateFormat
				.getDateInstance();
		simple.applyPattern("yyyy-MM-dd");
		if (rq == null || rq.equals("") || rq.equals("null"))
			return "";
		if (rq.length() == 10)
			simple.applyPattern("yyyy-MM-dd");
		if (rq.length() == 8)
			return rq;
		try {
			Date date = simple.parse(rq);
			simple.applyPattern("yyyyMMdd");
			return simple.format(date);
		} catch (ParseException e) {
			e.printStackTrace();
		}
		return rq;
	}

	/**
	 * 返回本年数
	 * @return
	 */
	public static int getNowYear() {
		Calendar calendar = Calendar.getInstance();
		return calendar.get(Calendar.YEAR);
	}

	/**
	 * 返回本月数
	 * @return
	 */
	public static int getNowMonth() {
		Calendar calendar = Calendar.getInstance();
		return calendar.get(Calendar.MONTH) + 1;
	}

	/**
	 * 返回当天日期
	 * @return
	 */
	public static String getNowDate() {
		Date date = new Date();
		SimpleDateFormat si = (SimpleDateFormat) DateFormat.getInstance();
		si.applyPattern("yyyyMMdd");// yyyyMMdd
		return si.format(date);
	}

	/**
	 * 返回当天日期时间
	 * @return
	 */
	public static String getNowTime() {

		Date date = new Date();
		SimpleDateFormat si = (SimpleDateFormat) DateFormat.getInstance();
		si.applyPattern("yyyyMMddHHmmss");// yyyyMMdd
		return si.format(date);
	}

	/**
	 * 获取当前日期后几天的日期
	 * 
	 * @param nowDate
	 * @param days
	 * @return
	 */
	public static String getNextDateByDate(String nowDate, int days) {
		if (nowDate == null || nowDate.length() != 8)
			return "";
		SimpleDateFormat simple = (SimpleDateFormat) DateFormat.getInstance();
		simple.applyPattern("yyyyMMdd");
		try {
			Date date = simple.parse(nowDate);
			Calendar ca = Calendar.getInstance();
			ca.setTime(date);
			// System.out.println(ca.get(Calendar.MONTH)+"=========="+(ca.get(Calendar.MONTH)+1));
			ca.set(Calendar.DATE, (ca.get(Calendar.DATE) + days));
			return simple.format(ca.getTime());
		} catch (ParseException e) {
			e.printStackTrace(); // To change body of catch statement use File |
									// Settings | File Templates.
			return null;
		}
	}

	/**
	 * 获取当前日期前几天的日期
	 * 
	 * @param nowDate
	 * @param days
	 * @return
	 */
	public static String getBeforeDateByDate(String nowDate, int days) {
		if (nowDate == null || nowDate.length() != 8)
			return "";
		SimpleDateFormat simple = (SimpleDateFormat) DateFormat.getInstance();
		simple.applyPattern("yyyyMMdd");
		try {
			Date date = simple.parse(nowDate);
			Calendar ca = Calendar.getInstance();
			ca.setTime(date);
			// System.out.println(ca.get(Calendar.MONTH)+"=========="+(ca.get(Calendar.MONTH)+1));
			ca.set(Calendar.DATE, (ca.get(Calendar.DATE) - days));
			return simple.format(ca.getTime());
		} catch (ParseException e) {
			e.printStackTrace(); // To change body of catch statement use File |
									// Settings | File Templates.
			return null;
		}
	}

	/**
	 * 获取当前日期前几天的日期
	 * 
	 * @param nowDate
	 * @param months
	 * @return
	 */
	public static String getBeforeDateByMonth(String nowDate, int months) {
		if (nowDate == null || nowDate.length() != 8)
			return "";
		String dateStr = nowDate.substring(6, 8);
		nowDate = nowDate.substring(0, 6) + "10";
		SimpleDateFormat simple = (SimpleDateFormat) DateFormat.getInstance();
		simple.applyPattern("yyyyMMdd");
		try {
			Date date = simple.parse(nowDate);
			Calendar ca = Calendar.getInstance();
			ca.setTime(date);
			// System.out.println(ca.get(Calendar.MONTH)+"=========="+(ca.get(Calendar.MONTH)+1));
			ca.set(Calendar.MONTH, (ca.get(Calendar.MONTH) - months + 1));
			String dateString = simple.format(ca.getTime());
			// System.out.println("dateString=============="+dateString);;
			return dateString.substring(0, 6) + dateStr;
		} catch (ParseException e) {
			e.printStackTrace(); // To change body of catch statement use File |
									// Settings | File Templates.
			return null;
		}
	}
	
	
	  /**
     * 获得指定日期的前一天
     * 
     * @param specifiedDay
     * @return
     * @throws Exception
     */
    public static String getSpecifiedDayBefore(String specifiedDay) {
        Calendar c = Calendar.getInstance();
        Date date = null;
        try {
            date = new SimpleDateFormat("yy-MM-dd").parse(specifiedDay);
        } catch (ParseException e) {
            e.printStackTrace();
        }
        c.setTime(date);
        int day = c.get(Calendar.DATE);
        c.set(Calendar.DATE, day - 1);

        String dayBefore = new SimpleDateFormat("yyyy-MM-dd").format(c
                .getTime());
        return dayBefore;
    }


	// 获取当前日期的 上月
	public static String getBeforeMonth() {
		int year = getNowYear();
		int month = getNowMonth();
		if (month == 1) {
			year = year - 1;
			month = 12;
		} else {
			month = month - 1;
		}
		String monthString = (month < 10) ? ("-0" + month) : "-" + month;
		return "" + year + monthString;
	}

	/**
	 * 获取评定年度
	 * 
	 * @return
	 */
	public static String[] getPdndArray() {
		Calendar calendar = Calendar.getInstance();
		int curyear = calendar.get(Calendar.YEAR);
		calendar.add(Calendar.YEAR, -1);
		int preyear = calendar.get(Calendar.YEAR);
		return new String[] { String.valueOf(preyear), String.valueOf(curyear) };
	}

	/**
	 * 得到二个日期间的间隔天数
	 */
	public static String getTwoDay(String sj1, String sj2) {
		SimpleDateFormat myFormatter = new SimpleDateFormat("yyyy-MM-dd");
		long day = 0;
		try {
			java.util.Date date = myFormatter.parse(sj1);
			java.util.Date mydate = myFormatter.parse(sj2);
			day = (date.getTime() - mydate.getTime()) / (24 * 60 * 60 * 1000);
		} catch (Exception e) {
			return "";
		}
		return day + "";
	}

	/**
	 * 根据一个日期，返回是星期几的字符串
	 * 
	 * @param sdate
	 * @return
	 */
	public static String getWeek(String sdate) {
		// 再转换为时间
		Date date = DateUtil.strToDate(sdate);
		Calendar c = Calendar.getInstance();
		c.setTime(date);
		// int hour=c.get(Calendar.DAY_OF_WEEK);
		// hour中存的就是星期几了，其范围 1~7
		// 1=星期日 7=星期六，其他类推
		return new SimpleDateFormat("EEEE").format(c.getTime());
	}

	/**
	 * 将短时间格式字符串转换为时间 yyyy-MM-dd
	 * 
	 * @param strDate
	 * @return
	 */
	public static Date strToDate(String strDate) {
		SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
		if(strDate.toString().length() == 14){
			   formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
			   strDate=transformDate_(strDate);
		}
		ParsePosition pos = new ParsePosition(0);
		Date strtodate = formatter.parse(strDate, pos);
		return strtodate;
	}

	/**
	 * 两个时间之间的天数
	 * 
	 * @param date1
	 * @param date2
	 * @return
	 */
	public static long getDays(String date1, String date2) {
		if (date1 == null || date1.equals(""))
			return 0;
		if (date2 == null || date2.equals(""))
			return 0;
		// 转换为标准时间
		SimpleDateFormat myFormatter = new SimpleDateFormat("yyyy-MM-dd");
		java.util.Date date = null;
		java.util.Date mydate = null;
		try {
			date = myFormatter.parse(date1);
			mydate = myFormatter.parse(date2);
		} catch (Exception e) {
		}
		long day = (date.getTime() - mydate.getTime()) / (24 * 60 * 60 * 1000);
		return day;
	}

	// 计算当月最后一天,返回字符串
	public static String getLastDayOfMonth() {
		String str = "";
		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");

		Calendar lastDate = Calendar.getInstance();
		lastDate.set(Calendar.DATE, 1);// 设为当前月的1号
		lastDate.add(Calendar.MONTH, 1);// 加一个月，变为下月的1号
		lastDate.add(Calendar.DATE, -1);// 减去一天，变为当月最后一天

		str = sdf.format(lastDate.getTime());
		return str;
	}

	// 上月第一天
	public String getPreviousMonthFirst() {
		String str = "";
		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");

		Calendar lastDate = Calendar.getInstance();
		lastDate.set(Calendar.DATE, 1);// 设为当前月的1号
		lastDate.add(Calendar.MONTH, -1);// 减一个月，变为下月的1号
		// lastDate.add(Calendar.DATE,-1);//减去一天，变为当月最后一天

		str = sdf.format(lastDate.getTime());
		return str;
	}

	// 获取当月第一天
	public static String getFirstDayOfMonth() {
		String str = "";
		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");

		Calendar lastDate = Calendar.getInstance();
		lastDate.set(Calendar.DATE, 1);// 设为当前月的1号
		str = sdf.format(lastDate.getTime());
		return str;
	}

	// 获得本周星期日的日期
	public static String getCurrentWeekday() {
		int mondayPlus = getMondayPlus();
		GregorianCalendar currentDate = new GregorianCalendar();
		currentDate.add(GregorianCalendar.DATE, mondayPlus + 6);
		Date monday = currentDate.getTime();

		DateFormat df = DateFormat.getDateInstance();
		String preMonday = df.format(monday);
		return preMonday;
	}

	// 获取当天时间
	public static String getNowTime(String dateformat) {
		Date now = new Date();
		SimpleDateFormat dateFormat = new SimpleDateFormat(dateformat);// 可以方便地修改日期格式
		String hehe = dateFormat.format(now);
		return hehe;
	}

	// 获得当前日期与本周日相差的天数
	private static int getMondayPlus() {
		Calendar cd = Calendar.getInstance();
		// 获得今天是一周的第几天，星期日是第一天，星期二是第二天......
		int dayOfWeek = cd.get(Calendar.DAY_OF_WEEK) - 1; // 因为按中国礼拜一作为第一天所以这里减1
		if (dayOfWeek == 1) {
			return 0;
		} else {
			return 1 - dayOfWeek;
		}
	}

	// 获得本周一的日期
	public String getMondayOFWeek() {
		int mondayPlus = this.getMondayPlus();
		GregorianCalendar currentDate = new GregorianCalendar();
		currentDate.add(GregorianCalendar.DATE, mondayPlus);
		Date monday = currentDate.getTime();

		DateFormat df = DateFormat.getDateInstance();
		String preMonday = df.format(monday);
		return preMonday;
	}

	// 获得相应周的周六的日期
	public String getSaturday() {
		int mondayPlus = this.getMondayPlus();
		GregorianCalendar currentDate = new GregorianCalendar();
		currentDate.add(GregorianCalendar.DATE, mondayPlus + 7 * weeks + 6);
		Date monday = currentDate.getTime();
		DateFormat df = DateFormat.getDateInstance();
		String preMonday = df.format(monday);
		return preMonday;
	}

	// 获得上周星期日的日期
	public String getPreviousWeekSunday() {
		weeks = 0;
		weeks--;
		int mondayPlus = this.getMondayPlus();
		GregorianCalendar currentDate = new GregorianCalendar();
		currentDate.add(GregorianCalendar.DATE, mondayPlus + weeks);
		Date monday = currentDate.getTime();
		DateFormat df = DateFormat.getDateInstance();
		String preMonday = df.format(monday);
		return preMonday;
	}

	// 获得上周星期一的日期
	public String getPreviousWeekday() {
		weeks--;
		int mondayPlus = this.getMondayPlus();
		GregorianCalendar currentDate = new GregorianCalendar();
		currentDate.add(GregorianCalendar.DATE, mondayPlus + 7 * weeks);
		Date monday = currentDate.getTime();
		DateFormat df = DateFormat.getDateInstance();
		String preMonday = df.format(monday);
		return preMonday;
	}

	// 获得下周星期一的日期
	public String getNextMonday() {
		weeks++;
		int mondayPlus = this.getMondayPlus();
		GregorianCalendar currentDate = new GregorianCalendar();
		currentDate.add(GregorianCalendar.DATE, mondayPlus + 7);
		Date monday = currentDate.getTime();
		DateFormat df = DateFormat.getDateInstance();
		String preMonday = df.format(monday);
		return preMonday;
	}

	// 获得下周星期日的日期
	public String getNextSunday() {

		int mondayPlus = this.getMondayPlus();
		GregorianCalendar currentDate = new GregorianCalendar();
		currentDate.add(GregorianCalendar.DATE, mondayPlus + 7 + 6);
		Date monday = currentDate.getTime();
		DateFormat df = DateFormat.getDateInstance();
		String preMonday = df.format(monday);
		return preMonday;
	}

	private static int getMonthPlus() {
		Calendar cd = Calendar.getInstance();
		int monthOfNumber = cd.get(Calendar.DAY_OF_MONTH);
		cd.set(Calendar.DATE, 1);// 把日期设置为当月第一天
		cd.roll(Calendar.DATE, -1);// 日期回滚一天，也就是最后一天
		MaxDate = cd.get(Calendar.DATE);
		if (monthOfNumber == 1) {
			return -MaxDate;
		} else {
			return 1 - monthOfNumber;
		}
	}

	// 获得上月最后一天的日期
	public static String getPreviousMonthEnd() {
		String str = "";
		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");

		Calendar lastDate = Calendar.getInstance();
		lastDate.add(Calendar.MONTH, -1);// 减一个月
		lastDate.set(Calendar.DATE, 1);// 把日期设置为当月第一天
		lastDate.roll(Calendar.DATE, -1);// 日期回滚一天，也就是本月最后一天
		str = sdf.format(lastDate.getTime());
		return str;
	}

	// 获得下个月第一天的日期
	public static String getNextMonthFirst() {
		String str = "";
		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");

		Calendar lastDate = Calendar.getInstance();
		lastDate.add(Calendar.MONTH, 1);// 减一个月
		lastDate.set(Calendar.DATE, 1);// 把日期设置为当月第一天
		str = sdf.format(lastDate.getTime());
		return str;
	}

	// 获得下个月最后一天的日期
	public static String getNextMonthEnd() {
		String str = "";
		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");

		Calendar lastDate = Calendar.getInstance();
		lastDate.add(Calendar.MONTH, 1);// 加一个月
		lastDate.set(Calendar.DATE, 1);// 把日期设置为当月第一天
		lastDate.roll(Calendar.DATE, -1);// 日期回滚一天，也就是本月最后一天
		str = sdf.format(lastDate.getTime());
		return str;
	}

	// 获得明年最后一天的日期
	public String getNextYearEnd() {
		String str = "";
		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");

		Calendar lastDate = Calendar.getInstance();
		lastDate.add(Calendar.YEAR, 1);// 加一个年
		lastDate.set(Calendar.DAY_OF_YEAR, 1);
		lastDate.roll(Calendar.DAY_OF_YEAR, -1);
		str = sdf.format(lastDate.getTime());
		return str;
	}

	// 获得明年第一天的日期
	public String getNextYearFirst() {
		String str = "";
		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");

		Calendar lastDate = Calendar.getInstance();
		lastDate.add(Calendar.YEAR, 1);// 加一个年
		lastDate.set(Calendar.DAY_OF_YEAR, 1);
		str = sdf.format(lastDate.getTime());
		return str;

	}

	// 获得本年有多少天
	private int getMaxYear() {
		Calendar cd = Calendar.getInstance();
		cd.set(Calendar.DAY_OF_YEAR, 1);// 把日期设为当年第一天
		cd.roll(Calendar.DAY_OF_YEAR, -1);// 把日期回滚一天。
		int MaxYear = cd.get(Calendar.DAY_OF_YEAR);
		return MaxYear;
	}

	private static int getYearPlus() {
		Calendar cd = Calendar.getInstance();
		int yearOfNumber = cd.get(Calendar.DAY_OF_YEAR);// 获得当天是一年中的第几天
		cd.set(Calendar.DAY_OF_YEAR, 1);// 把日期设为当年第一天
		cd.roll(Calendar.DAY_OF_YEAR, -1);// 把日期回滚一天。
		int MaxYear = cd.get(Calendar.DAY_OF_YEAR);
		if (yearOfNumber == 1) {
			return -MaxYear;
		} else {
			return 1 - yearOfNumber;
		}
	}

	// 获得本年第一天的日期
	public static String getCurrentYearFirst() {
		int yearPlus = getYearPlus();
		GregorianCalendar currentDate = new GregorianCalendar();
		currentDate.add(GregorianCalendar.DATE, yearPlus);
		Date yearDay = currentDate.getTime();
		DateFormat df = DateFormat.getDateInstance();
		String preYearDay = df.format(yearDay);
		return preYearDay;
	}

	// 获得本年最后一天的日期 *
	public static String getCurrentYearEnd() {
		Date date = new Date();
		SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy");// 可以方便地修改日期格式
		String years = dateFormat.format(date);
		return years + "-12-31";
	}

	// 获得上年第一天的日期 *
	public static String getPreviousYearFirst() {
		Date date = new Date();
		SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy");// 可以方便地修改日期格式
		String years = dateFormat.format(date);
		int years_value = Integer.parseInt(years);
		years_value--;
		return years_value + "-1-1";
	}

	// 获得上年最后一天的日期
	public static String getPreviousYearEnd() {
		weeks--;
		int yearPlus = getYearPlus();
		GregorianCalendar currentDate = new GregorianCalendar();
		currentDate.add(GregorianCalendar.DATE, yearPlus + MaxYear * weeks
				+ (MaxYear - 1));
		Date yearDay = currentDate.getTime();
		DateFormat df = DateFormat.getDateInstance();
		String preYearDay = df.format(yearDay);
		getThisSeasonTime(11);
		return preYearDay;
	}

	// 获得本季度
	public static String getThisSeasonTime(int month) {
		int array[][] = { { 1, 2, 3 }, { 4, 5, 6 }, { 7, 8, 9 }, { 10, 11, 12 } };
		int season = 1;
		if (month >= 1 && month <= 3) {
			season = 1;
		}
		if (month >= 4 && month <= 6) {
			season = 2;
		}
		if (month >= 7 && month <= 9) {
			season = 3;
		}
		if (month >= 10 && month <= 12) {
			season = 4;
		}
		int start_month = array[season - 1][0];
		int end_month = array[season - 1][2];

		Date date = new Date();
		SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy");// 可以方便地修改日期格式
		String years = dateFormat.format(date);
		int years_value = Integer.parseInt(years);

		int start_days = 1;// years+"-"+String.valueOf(start_month)+"-1";//getLastDayOfMonth(years_value,start_month);
		int end_days = getLastDayOfMonth(years_value, end_month);
		String seasonDate = years_value + "-" + start_month + "-" + start_days
				+ ";" + years_value + "-" + end_month + "-" + end_days;
		return seasonDate;

	}

	public static String getThisSeasonEnd(int month) {
		int array[][] = { { 1, 2, 3 }, { 4, 5, 6 }, { 7, 8, 9 }, { 10, 11, 12 } };
		int season = 1;
		if (month >= 1 && month <= 3) {
			season = 1;
		}
		if (month >= 4 && month <= 6) {
			season = 2;
		}
		if (month >= 7 && month <= 9) {
			season = 3;
		}
		if (month >= 10 && month <= 12) {
			season = 4;
		}
		int start_month = array[season - 1][0];
		int end_month = array[season - 1][2];

		Date date = new Date();
		SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy");// 可以方便地修改日期格式
		String years = dateFormat.format(date);
		int years_value = Integer.parseInt(years);

		int start_days = 1;// years+"-"+String.valueOf(start_month)+"-1";//getLastDayOfMonth(years_value,start_month);
		int end_days = getLastDayOfMonth(years_value, end_month);
		String seasonDate = years_value + ""
				+ ((end_month < 10) ? ("0" + end_month) : end_month)
				+ ((end_days < 10) ? ("0" + end_days) : end_days);
		return seasonDate;

	}

	public static String getThisSeasonFirst(int month) {
		int array[][] = { { 1, 2, 3 }, { 4, 5, 6 }, { 7, 8, 9 }, { 10, 11, 12 } };
		int season = 1;
		if (month >= 1 && month <= 3) {
			season = 1;
		}
		if (month >= 4 && month <= 6) {
			season = 2;
		}
		if (month >= 7 && month <= 9) {
			season = 3;
		}
		if (month >= 10 && month <= 12) {
			season = 4;
		}
		int start_month = array[season - 1][0];
		int end_month = array[season - 1][2];

		Date date = new Date();
		SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy");// 可以方便地修改日期格式
		String years = dateFormat.format(date);
		int years_value = Integer.parseInt(years);

		int start_days = 1;// years+"-"+String.valueOf(start_month)+"-1";//getLastDayOfMonth(years_value,start_month);
		int end_days = getLastDayOfMonth(years_value, end_month);
		String seasonDate = years_value + ""
				+ ((start_month < 10) ? ("0" + start_month) : start_month)
				+ ((start_days < 10) ? ("0" + start_days) : start_days);

		return seasonDate;

	}

	/**
	 * 当前年本季度的第一天
	 * 
	 * @param years
	 * @param month
	 * @return
	 */
	public static String getThisSeasonFirst(String years, int month) {
		int array[][] = { { 1, 2, 3 }, { 4, 5, 6 }, { 7, 8, 9 }, { 10, 11, 12 } };
		int season = 1;
		if (month >= 1 && month <= 3) {
			season = 1;
		}
		if (month >= 4 && month <= 6) {
			season = 2;
		}
		if (month >= 7 && month <= 9) {
			season = 3;
		}
		if (month >= 10 && month <= 12) {
			season = 4;
		}
		int start_month = array[season - 1][0];
		int end_month = array[season - 1][2];
		// Date date = new Date();
		// SimpleDateFormat dateFormat = new
		// SimpleDateFormat("yyyy");//可以方便地修改日期格式
		// String years = dateFormat.format(date);
		int years_value = Integer.parseInt(years);

		int start_days = 1;// years+"-"+String.valueOf(start_month)+"-1";//getLastDayOfMonth(years_value,start_month);
		int end_days = getLastDayOfMonth(years_value, end_month);
		String seasonDate = years_value + ""
				+ ((start_month < 10) ? ("0" + start_month) : start_month)
				+ ((start_days < 10) ? ("0" + start_days) : start_days);
		return seasonDate;

	}

	/**
	 * 当前年当月所在季度最后一天
	 * 
	 * @param years
	 * @param month
	 * @return
	 */
	public static String getThisSeasonEnd(String years, int month) {
		int array[][] = { { 1, 2, 3 }, { 4, 5, 6 }, { 7, 8, 9 }, { 10, 11, 12 } };
		int season = 1;
		if (month >= 1 && month <= 3) {
			season = 1;
		}
		if (month >= 4 && month <= 6) {
			season = 2;
		}
		if (month >= 7 && month <= 9) {
			season = 3;
		}
		if (month >= 10 && month <= 12) {
			season = 4;
		}
		int start_month = array[season - 1][0];
		int end_month = array[season - 1][2];
		// Date date = new Date();
		// SimpleDateFormat dateFormat = new
		// SimpleDateFormat("yyyy");//可以方便地修改日期格式
		// String years = dateFormat.format(date);
		int years_value = Integer.parseInt(years);
		int start_days = 1;// years+"-"+String.valueOf(start_month)+"-1";//getLastDayOfMonth(years_value,start_month);
		int end_days = getLastDayOfMonth(years_value, end_month);
		String seasonDate = years_value + ""
				+ ((end_month < 10) ? ("0" + end_month) : end_month)
				+ ((end_days < 10) ? ("0" + end_days) : end_days);
		return seasonDate;

	}

	/**
	 * 获取某年某月的最后一天
	 * 
	 * @param year
	 *            年
	 * @param month
	 *            月
	 * @return 最后一天
	 */
	private static int getLastDayOfMonth(int year, int month) {
		if (month == 1 || month == 3 || month == 5 || month == 7 || month == 8
				|| month == 10 || month == 12) {
			return 31;
		}
		if (month == 4 || month == 6 || month == 9 || month == 11) {
			return 30;
		}
		if (month == 2) {
			if (isLeapYear(year)) {
				return 29;
			} else {
				return 28;
			}
		}
		return 0;
	}

	/**
	 * 是否闰年
	 * 
	 * @param year
	 *            年
	 * @return
	 */
	public static boolean isLeapYear(int year) {
		return (year % 4 == 0 && year % 100 != 0) || (year % 400 == 0);
	}

	// 判断当前日期是否是本季节的最后一天
	public static boolean isLastDayOfThisSeason(String currentTime) {
		int currentM = Integer.parseInt(currentTime.substring(4, 6));
		if (getThisSeasonEnd(currentM).replace("-", "").equals(currentTime)) {
			return true;
		} else {
			return false;
		}
	}

	public static boolean isFirstDayOfThisSeason(String currentTime) {
		int currentM = Integer.parseInt(currentTime.substring(4, 6));
		if (getThisSeasonFirst(currentM).replace("-", "").equals(currentTime)) {
			return true;
		} else {
			return false;
		}

	}

	// 获得一年的最后一天

	public static boolean isLastDayOfThisYear(String currentTime) {
		if (getCurrentYearEnd().replace("-", "").equals(currentTime)) {
			return true;
		} else {
			return false;
		}
	}

	// 获得这个月的第一天
	public static boolean isFirstDayOfThisMonth(String currentTime) {

		if (getFirstDayOfMonth().replace("-", "").equals(currentTime)) {
			return true;
		} else {
			return false;
		}

	}

	// 获得这个月的最后一天
	public static boolean isLastDayOfThisMonth(String currentTime) {
		if (getLastDayOfMonth().replace("-", "").equals(currentTime)) {
			return true;
		} else {
			return false;
		}
	}

	// 获得所属期起时间
	public static String getSSQQ(String currentTime) {
		int currentM = Integer.parseInt(currentTime.substring(4, 6));
		if (isLastDayOfThisYear(currentTime)) {
			return getCurrentYearEnd();
		}
		if (isLastDayOfThisSeason(currentTime)) {
			return getThisSeasonEnd(currentM);
		}
		if (isLastDayOfThisMonth(currentTime)) {
			return getLastDayOfMonth();
		}
		return null;

	}

	// 获得所属期止时间
	public static String getSSQZ(String currentTime) {
		int currentM = Integer.parseInt(currentTime.substring(4, 6));
		if (isLastDayOfThisYear(currentTime)) {
			return getCurrentYearFirst();
		}
		if (isLastDayOfThisSeason(currentTime)) {
			return getThisSeasonFirst(currentM);
		}
		if (isLastDayOfThisMonth(currentTime)) {
			return getFirstDayOfMonth();
		}
		return null;
	}
	
	

}
